/**
 * @author tongxin
 * @date 2024/4/18 22:05
 */
export class FileHeader {

  /**
   * 文件头大小常量，单位为字节
   */
 static FILE_HEADER_SIZE = 0x14 as const;
  /**
   * 机器类型，指明此文件是为哪种处理器构建的
   */
  machine: number;

  /**
   * 段的数量，PE文件可以被组织成多个段
   */
  numberOfSections: number;

  /**
   * 编译或链接的时间日期戳
   */
  timeDateStamp: number;

  /**
   * 指向符号表的指针，用于调试信息
   */
  pointerToSymbolTable: number;

  /**
   * 符号表中的符号数量
   */
  numberOfSymbols: number;

  /**
   * 可选头的大小，单位为字节。不是所有PE文件都有可选头
   */
  sizeOfOptionalHeader: number;

  /**
   * 文件的特性，如是否可执行、是否是DLL等
   */
  characteristics: number;

   constructor(byteArray: IByteArray) {
    this.machine = byteArray.readWord();
    this.numberOfSections = byteArray.readWord();
    this.timeDateStamp = byteArray.readDWord();
    this.pointerToSymbolTable = byteArray.readDWord();
    this.numberOfSymbols = byteArray.readDWord();
    this.sizeOfOptionalHeader = byteArray.readWord();
    this.characteristics = byteArray.readWord();
  }
}
